﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace QuanLyKhachHang.Forms
{
    #region using
    using QuanLyKhachHang.BUS;
    using QuanLyKhachHang.DTO;
    using QuanLyKhachHang.Utilities;
    #endregion

    public partial class frmKhachHang : Form
    {
        private bool blnLoading;
        private KhachHangBUS objBUS;
        private DataSet objDS;

        public frmKhachHang()
        {
            InitializeComponent();
        }

        public void LoadDonVi()
        {
            var objBUS = new DonViBUS(GlobalVariables.g_strConnectionString);

            try
            {
                blnLoading = true;
                objDS = objBUS.SelectAll();

                for (int i = 0; i < objDS.Tables["DonVi"].Rows.Count; i++)
                {
                    DataRow row = objDS.Tables["DonVi"].Rows[i];
                    cbxDonVi.Items.Add(new DonViDTO { MADONVI = row["MADONVI"].ToString(), TENDONVI = row["TENDONVI"].ToString() });
                }

                if(cbxDonVi.Items.Count > 0)
                    cbxDonVi.SelectedIndex = 0;
                blnLoading = false;
            }
            catch (System.Exception e)
            {
                throw new Exception(e.Message, e.InnerException);
            }
        }

        public void LoadKhachHang(string madonvi)
        {
            ListViewItem objListViewItem;
            objBUS = new KhachHangBUS(GlobalVariables.g_strConnectionString);

            try
            {
                blnLoading = true;

                lstvwDanhSachHienThi.Items.Clear();
                objDS = objBUS.SelectByMADONVI(madonvi);

                for (int i = 0; i < objDS.Tables["KhachHang"].Rows.Count; i++)
                {
                    objListViewItem = new ListViewItem();
                    DataRow row = objDS.Tables["KhachHang"].Rows[i];
                    objListViewItem.Text = row["TENKH"].ToString();
                    objListViewItem.Tag = int.Parse(row["MAKH"].ToString());
                    objListViewItem.SubItems.Add(row["DIACHI"].ToString());
                    lstvwDanhSachHienThi.Items.Add(objListViewItem);
                }

                blnLoading = false;
            }
            catch (System.Exception e)
            {
                throw new Exception(e.Message, e.InnerException);
            }
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            ActionAdd();
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            ActionDelete();
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            ActionUpdate();
        }

        public void ActionUpdate()
        {
            try
            {
                objBUS = new KhachHangBUS(GlobalVariables.g_strConnectionString);

                if (txtTenKH.Text.Equals(""))
                {
                    MessageBox.Show("Bạn chưa nhập tên khách hàng", "Bao Loi",
                        MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    return;
                }

                if (txtDiaChi.Text.Equals(""))
                {
                    MessageBox.Show("Bạn chưa nhập địa chỉ", "Bao Loi",
                        MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    return;
                }

                KhachHangDTO objDto = new KhachHangDTO
                {
                    MADONVI = ((DonViDTO)cbxDonVi.SelectedItem).MADONVI,
                    MAKH = int.Parse(txtMaKH.Text),
                    TENKH = txtTenKH.Text,
                    DIACHI = txtDiaChi.Text
                };

                if (!objBUS.Update(objDto))
                {
                    MessageBox.Show("Thao tác cập nhật thất bại", "Bao Loi",
                        MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                }
                else
                {
                    MessageBox.Show("Dữ liệu đã được cập nhật", "Thông báo",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                    LoadKhachHang(((DonViDTO)cbxDonVi.SelectedItem).MADONVI);
                }
            }
            catch (System.Exception e)
            {
                throw new Exception(e.Message, e.InnerException);
            }
        }

        private void ActionDelete()
        {
            //neu o o textname chua co du lieu
            if (txtMaKH.Text.Equals(""))
            {
                MessageBox.Show("Bạn chưa chọn khách hàng để xóa", "Bao Loi",
                    MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                return;
            }
            else
            {
                objBUS = new KhachHangBUS(GlobalVariables.g_strConnectionString);

                if (!objBUS.Delete(int.Parse(txtMaKH.Text)))
                {
                    MessageBox.Show("Thao tác xóa thất bại", "Bao loi",
                        MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                }
                else
                {
                    txtMaKH.Text = String.Empty;
                    txtTenKH.Text = String.Empty;
                    txtDiaChi.Text = String.Empty;

                    MessageBox.Show("Dữ liệu đã được xóa", "Thông báo",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                    LoadKhachHang(((DonViDTO)cbxDonVi.SelectedItem).MADONVI);
                }
            }
        }

        private void ActionAdd()
        {
            try
            {
                objBUS = new KhachHangBUS(GlobalVariables.g_strConnectionString);

                if (txtTenKH.Text.Equals(""))
                {
                    MessageBox.Show("Bạn chưa nhập tên khách hàng", "Bao Loi",
                        MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    return;
                }

                if (txtDiaChi.Text.Equals(""))
                {
                    MessageBox.Show("Bạn chưa nhập địa chỉ", "Bao Loi",
                        MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    return;
                }

                KhachHangDTO objDto = new KhachHangDTO
                {
                    MADONVI = ((DonViDTO)cbxDonVi.SelectedItem).MADONVI,
                    TENKH = txtTenKH.Text,
                    DIACHI = txtDiaChi.Text
                };

                if (!objBUS.Insert(objDto))
                {
                    MessageBox.Show("Thao tác thêm thất bại", "Bao Loi",
                        MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                }
                else
                {
                    MessageBox.Show("Dữ liệu đã được thêm", "Thông báo",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                    LoadKhachHang(((DonViDTO)cbxDonVi.SelectedItem).MADONVI);
                }
            }
            catch (System.Exception e)
            {
                throw new Exception(e.Message, e.InnerException);
            }
        }

        private void lstvwDanhSachHienThi_Click(object sender, EventArgs e)
        {
            objBUS = new KhachHangBUS(GlobalVariables.g_strConnectionString);

            try
            {
                ListView.SelectedListViewItemCollection lstview =
                    this.lstvwDanhSachHienThi.SelectedItems;

                objDS = objBUS.SelectByID(int.Parse(lstview[0].Tag.ToString()));
                DataRow row = objDS.Tables["KhachHang"].Rows[0];

                txtMaKH.Text = row["MAKH"].ToString();
                txtTenKH.Text = row["TENKH"].ToString();
                txtDiaChi.Text = row["DIACHI"].ToString();

                for (int i = 0; i < cbxDonVi.Items.Count; i++)
                {
                    if (((DonViDTO)cbxDonVi.Items[i]).MADONVI == row["MADONVI"].ToString())
                    {
                        cbxDonVi.SelectedIndex = i;
                    }
                }
            }
            catch (System.Exception ex)
            {
                throw new Exception(ex.Message, ex.InnerException);
            }
        }

        private void btnReset_Click(object sender, EventArgs e)
        {
            txtMaKH.Text = "";
            txtTenKH.Text = "";
            txtDiaChi.Text = "";
            cbxDonVi.SelectedIndex = 0;
        }

        private void frmKhachHang_Load(object sender, EventArgs e)
        {
            LoadDonVi();
        }

        private void cbxDonVi_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (blnLoading)
                return;
            if (cbxDonVi.SelectedIndex != -1)
            {
                LoadKhachHang(((DonViDTO)cbxDonVi.SelectedItem).MADONVI);
            }
        }
    }
}
